import dataclasses
import enum
import traceback
from typing import List, Union, Optional, Dict

from dataclasses_jsonschema import JsonSchemaMixin, JsonDict
from pyquery.pyquery import PyQuery as PQ


# word解析Token及题型定义
# since 22.3.x
class PosMixin:

    @property
    def left(self):
        return self.box[0]

    @property
    def top(self):
        return self.box[1]

    @property
    def width(self):
        return self.box[2]

    @property
    def height(self):
        return self.box[3]

    @property
    def right(self):
        return self.left + self.width

    @property
    def bottom(self):
        return self.top + self.height


@dataclasses.dataclass
class OpticalLine(PosMixin, JsonSchemaMixin):
    text: str
    box: tuple[int, int, int, int]  # 位置. left_top，width, height
    page_num: Optional[int] = None  # 页码

    url: Optional[str] = None  # 图片url
    line_num: Optional[int] = None  # 行编号
    # chars: List[OpticalChars] | None = None  # 识别后的文字

    column_num: Optional[int] = None  # 所在栏
    no: str = None
    rec_score: Optional[float] = None
    cls_score: Optional[float] = None
    columns: Optional[List[List[float]]] = None

TAG_TYPE = Union[str or PQ or OpticalLine]
PLAIN_TAGS = ['b', 'i', 'u', 'span']


class ParagraphType(enum.Enum):
    """
    段落类型
    """
    TITLE = 0  # 标题
    SEGMENT = 1  # 分节、分类
    STEM = 2  # 题干
    OPTION = 3  # 选项
    PROPER = 4  # 答案
    ANALYSIS = 5  # 解析
    TEXT = 6  # 普通文本
    CHILD_STEM = 7  # 小题题干

    PROPER_SEGMENT = 8  # 参考答案分节标记

    UNKNOWN = 99  # 未知
    IGNORE = 100  # 忽略


@dataclasses.dataclass
class Token(JsonSchemaMixin):
    type: ParagraphType
    tags: Optional[List[Union[str, PQ, OpticalLine]]]  # 解析后的html tag列表
    # extra: object = None  # 已解析的附属内容
    # cut questions use since:2024-04-24
    box: tuple[int, int, int, int] = (0, 0, 0, 0)  # 位置. left_top，width, height
    model: int = None  # 题型
    children: List = None
    page_boxes: Dict = None  # 按页分类的box
    boxes: List = None  # 冗余调试字段

    # end
    @property
    def print(self):
        return f"{self.type}::{self.__str__()}"

    def __str__(self):
        _str_list = []
        for tag in self.tags or []:
            if isinstance(tag, OpticalLine):
                _str_list.append(tag.text)
            else:
                _str_list.append(str(tag))
        return "".join(str(itr) for itr in _str_list)

    # @property
    # def boxes(self):
    #     return [itr.box for itr in self.tags if isinstance(itr, OpticalLine)] if self.tags else []

    def to_dict(self, omit_none: bool = True, validate: bool = False) -> JsonDict:
        return dict(
            type=self.type.value,
            content=self.text(),
            page_boxes=self.page_boxes,
            boxes=self.boxes,
        )

    def get_bounding_boxes(self):
        line = self.tags[0]

        return {line.url: [line.box]}

    def text(self):
        texts = []
        for tag in self.tags:
            if isinstance(tag, str):
                texts.append(tag)
            elif isinstance(tag, PQ):
                texts.append(tag.outer_html())
            elif isinstance(tag, OpticalLine):
                texts.append(tag.text)
        return ''.join(texts) if self.tags else ''


class IgnoreToken(Token):
    pass


@dataclasses.dataclass
class OptionToken(Token):
    option: str = None

    def __init__(self, option: Optional[str], tags: List[TAG_TYPE]):
        super(OptionToken, self).__init__(type=ParagraphType.OPTION, tags=tags)
        self.option = option

    def to_dict(self, omit_none: bool = True, validate: bool = False) -> JsonDict:
        result = {'answer': self.option, 'content': self.text()}
        return result

    @property
    def print(self):
        return f"{self.type}::{self.option}::{self.__str__()}"

@dataclasses.dataclass
class QuestionToken(Token):
    no: str = None
    score: float = None
    model: int = None  # 题型
    segment: str = None  # 学科题型的文本
    align: int = None  # 选项排列顺组
    proper: Token = None  # 参考答案
    judge: Union[Token, str] = None
    analysis: Token = None  # 解析
    subject_question_id: int = None  # 学科题型

    options: List[OptionToken] = None

    children: Union[List, None] = None  # 子题目

    is_child = False  # 是否是小题

    parent = None

    child_level: int = -1  # 第几层小题


    def __init__(self, no: str, tags: List[TAG_TYPE]):
        super(QuestionToken, self).__init__(type=ParagraphType.STEM, tags=tags)
        self.no = no
        self.type = ParagraphType.STEM
        self.tags = tags

    @property
    def print(self):
        if self.is_child:
            return f"::{self.no}::is_child::{self.__str__()}::{self.type}"
        return f"::{self.no}::{self.__str__()}::{self.type}"

    def to_dict(self, omit_none: bool = True, validate: bool = False) -> JsonDict:
        result = super(QuestionToken, self).to_dict(omit_none, validate)
        result.update(dict(
            no=self.no,
            # score=self.score,
            # model=self.model,
            # align=self.align,
            # proper=self.proper.text() if self.proper eldrse '',
            # judge=self.judge.text() if self.judge else '',
            analysis=self.analysis.text() if self.analysis else '',
            options=[o.to_dict() for o in self.options] if self.options else None,
            segment=self.segment,
            page_boxes=self.page_boxes,
            # boxes=self.boxes,
            boxes=self.boxes,

        ))
        if self.children:
            result.update(dict(
                children=[sub.to_dict() for sub in self.children]
            ))
        else:
            result['children'] = []
        return result

    def get_bounding_boxes(self):
        """
        ocr切题 处理题目的外边框

        TODO: 跨栏、跨页处理
        跨栏检测：
            1、top回退到很小的值
            2、left >> 上一行的right
        :return:
        """
        # 跨栏检测
        lines = self.tags.copy()
        if self.options:
            for o in self.options:
                lines.extend(o.tags)

        if not lines:
            return {}
        lines = list(filter(lambda i: isinstance(i, OpticalLine), lines))  # 过滤掉纯文本内容
        if len(lines) == 0:
            return {}

        page_boxes = {}
        urls = []
        [urls.append(line.url) for line in lines]
        for line in lines:
            page_boxes.setdefault(line.url, []).append(line)
        return_page_boxes = {}
        for _url, _lines in page_boxes.items():
            # 边框按页[url]分类
            boxes = []
            columns = _lines[0].columns if _lines else []
            column_count = max([c.column_num or 0 for c in _lines]) + 1
            for column_index in range(column_count):
                if not [c.left for c in _lines if c.column_num == column_index]:
                    continue

                # 逐栏合并边框
                left = min([c.left for c in _lines if c.column_num == column_index and c.url == _url])
                top = min([c.top for c in _lines if c.column_num == column_index and c.url == _url])
                width = max([c.width + c.left for c in _lines if c.column_num == column_index and c.url == _url]) - left
                height = max([c.height + c.top for c in _lines if c.column_num == column_index and c.url == _url]) - top

                try:
                    # 对齐左右
                    if columns and column_index < len(columns):
                        column = columns[column_index]
                        left = column[0]
                        width = column[2]
                except IndexError:
                    traceback.print_exc()


                boxes.append([left, top, width, height])

            return_page_boxes[_url] = boxes
        # print('return_page_boxes', return_page_boxes)
        return return_page_boxes


# 学科题型预处理定义
SUBJECT_QUESTION_TYPE_HANDLERS = {
    # 初中英语
    14: [{'id': 1230, 'name': '语法填空', 'parent_id': 1230, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1231, 'name': '根据情景写句子', 'parent_id': 1231, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1201, 'name': '听力填空', 'parent_id': 1201, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120101, 'name': '听句子或对话填表', 'parent_id': 1201, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120102, 'name': '听录音写单词或短语', 'parent_id': 1201, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120103, 'name': '听录音补全句子', 'parent_id': 1201, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120104, 'name': '听短文填表', 'parent_id': 1201, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120106, 'name': '听录音补全对话', 'parent_id': 1201, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120107, 'name': '听录音补全短文', 'parent_id': 1201, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120108, 'name': '听录音回答问题', 'parent_id': 1201, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1202, 'name': '听力排序', 'parent_id': 1202, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120201, 'name': '听对话给句子排序', 'parent_id': 1202, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120202, 'name': '听对话给图片排序', 'parent_id': 1202, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120203, 'name': '听短文给句子排序', 'parent_id': 1202, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120204, 'name': '听短文给图片排序', 'parent_id': 1202, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1203, 'name': '听力选择', 'parent_id': 1203, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 120309, 'name': '听录音完成表格（含选项）', 'parent_id': 1203, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120303, 'name': '听短对话选答案', 'parent_id': 1203, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 120307, 'name': '听长对话选答案', 'parent_id': 1203, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 120301, 'name': '听录音选图片', 'parent_id': 1203, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 120302, 'name': '听句子选答语', 'parent_id': 1203, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 120308, 'name': '听句子选相同信息', 'parent_id': 1203, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120304, 'name': '听句子选相似信息', 'parent_id': 1203, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 120305, 'name': '听短文选答案', 'parent_id': 1203, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 120306, 'name': '听音选词', 'parent_id': 1203, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1204, 'name': '听力判断', 'parent_id': 1204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120401, 'name': '听句子或对话判断', 'parent_id': 1204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120402, 'name': '听短文判断', 'parent_id': 1204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1205, 'name': '单项选择', 'parent_id': 1205, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1223, 'name': '听力匹配题', 'parent_id': 1223, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1224, 'name': '语音题', 'parent_id': 1224, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122401, 'name': '语音辨识', 'parent_id': 1224, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122402, 'name': '根据音标写单词', 'parent_id': 1224, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122403, 'name': '根据音标归类', 'parent_id': 1224, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1206, 'name': '句型转换', 'parent_id': 1206, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120601, 'name': '划线部分提问', 'parent_id': 1206, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120602, 'name': '同义句转化', 'parent_id': 1206, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120604, 'name': '改写句子', 'parent_id': 1206, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120603, 'name': '写出答句', 'parent_id': 1206, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1207, 'name': '单词拼写', 'parent_id': 1207, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120707, 'name': '根据英文解释填空', 'parent_id': 1207, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120708, 'name': '根据汉语及首字母填空', 'parent_id': 1207, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120705, 'name': '根据汉语提示填空', 'parent_id': 1207, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120706, 'name': '词形转换', 'parent_id': 1207, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120701, 'name': '根据句意填空', 'parent_id': 1207, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120702, 'name': '根据首字母填空', 'parent_id': 1207, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120703, 'name': '看图识词', 'parent_id': 1207, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 120704, 'name': '根据句意及音标填空', 'parent_id': 1207, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1208, 'name': '用所给单词的正确形式填空', 'parent_id': 1208, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1209, 'name': '完成句子', 'parent_id': 1209, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1210, 'name': '选词填空', 'parent_id': 1210, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121003, 'name': '单句选词填空', 'parent_id': 1210, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121001, 'name': '多句选词填空', 'parent_id': 1210, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121002, 'name': '短文选词填空', 'parent_id': 1210, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1211, 'name': '补全对话', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121111, 'name': '补全对话3选3', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121101, 'name': '填写适当的句子补全对话', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121102, 'name': '选择适当的单词补全对话', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121103, 'name': '填写适当的单词补全对话', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121104, 'name': '句子配对', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121110, 'name': '补全对话4选4', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 121105, 'name': '补全对话5选4', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 121106, 'name': '补全对话5选5', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 121107, 'name': '补全对话6选5', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 121108, 'name': '补全对话7选5', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 121109, 'name': '补全对话单选', 'parent_id': 1211, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1212, 'name': '阅读还原', 'parent_id': 1212, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121201, 'name': '阅读还原5选4', 'parent_id': 1212, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 121205, 'name': '阅读还原4选4', 'parent_id': 1212, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 121202, 'name': '阅读还原5选5', 'parent_id': 1212, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 121203, 'name': '阅读还原6选5', 'parent_id': 1212, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 121204, 'name': '阅读还原7选5', 'parent_id': 1212, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1213, 'name': '短文填空', 'parent_id': 1213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121304, 'name': '短文首字母填空', 'parent_id': 1213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121305, 'name': '短文语境提示填空', 'parent_id': 1213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121306, 'name': '短文综合填空', 'parent_id': 1213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121301, 'name': '短文汉语提示填空', 'parent_id': 1213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121303, 'name': '图文填空', 'parent_id': 1213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1214, 'name': '完型填空', 'parent_id': 1214, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1228, 'name': '语法选择', 'parent_id': 1228, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1215, 'name': '阅读理解', 'parent_id': 1215, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 121501, 'name': '阅读单选', 'parent_id': 1215, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 121502, 'name': '阅读判断', 'parent_id': 1215, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1216, 'name': '任务型阅读', 'parent_id': 1216, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121601, 'name': '阅读填表', 'parent_id': 1216, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121602, 'name': '阅读匹配', 'parent_id': 1216, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121607, 'name': '阅读补全短文', 'parent_id': 1216, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121608, 'name': '阅读信息摘录', 'parent_id': 1216, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121603, 'name': '阅读补全句子', 'parent_id': 1216, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121604, 'name': '阅读回答问题', 'parent_id': 1216, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121605, 'name': '多任务混合阅读', 'parent_id': 1216, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121606, 'name': '阅读排序', 'parent_id': 1216, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1217, 'name': '改错', 'parent_id': 1217, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121701, 'name': '句子/对话改错', 'parent_id': 1217, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121702, 'name': '短文改错', 'parent_id': 1217, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1229, 'name': '读写综合', 'parent_id': 1229, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1218, 'name': '句子排序', 'parent_id': 1218, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1219, 'name': '连词成句', 'parent_id': 1219, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121901, 'name': '将所给单词连成句子', 'parent_id': 1219, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 121902, 'name': '根据图画及所给单词写出句子', 'parent_id': 1219, 'pre': '', 'post': '',
          'is_choice': False},
         {'id': 1220, 'name': '翻译题', 'parent_id': 1220, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122008, 'name': '语篇翻译', 'parent_id': 1220, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122001, 'name': '汉译英：单词/短语', 'parent_id': 1220, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122002, 'name': '汉译英：整句', 'parent_id': 1220, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122003, 'name': '英译汉：单词/短语', 'parent_id': 1220, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122004, 'name': '英译汉：整句', 'parent_id': 1220, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122005, 'name': '英汉互译：单词/短语', 'parent_id': 1220, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122006, 'name': '英汉互译：整句', 'parent_id': 1220, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1221, 'name': '书面表达', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122111, 'name': '电子邮件', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122112, 'name': '小作文', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122101, 'name': '看图作文', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122102, 'name': '材料作文', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122103, 'name': '话题作文', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122104, 'name': '书信作文', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122105, 'name': '看图写短语或句子', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122106, 'name': '日记', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122107, 'name': '讲稿', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122108, 'name': '便条', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122109, 'name': '启事类', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 122110, 'name': '通知', 'parent_id': 1221, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1222, 'name': '其他', 'parent_id': 1222, 'pre': '', 'post': '', 'is_choice': False}],
    1: [{'id': 2701, 'name': '单选题', 'parent_id': 2701, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 2704, 'name': '多选题', 'parent_id': 2704, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 2702, 'name': '填空题', 'parent_id': 2702, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2703, 'name': '解答题', 'parent_id': 2703, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2705, 'name': '双空题', 'parent_id': 2705, 'pre': '', 'post': '', 'is_choice': False}],
    29: [{'id': 3501, 'name': '选择题', 'parent_id': 3501, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 3502, 'name': '填空题', 'parent_id': 3502, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 3503, 'name': '判断题', 'parent_id': 3503, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 3504, 'name': '操作题', 'parent_id': 3504, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 3505, 'name': '简答题', 'parent_id': 3505, 'pre': '', 'post': '', 'is_choice': False}],
    7: [{'id': 2601, 'name': '选择题', 'parent_id': 2601, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 2602, 'name': '现代文阅读', 'parent_id': 2602, 'pre': 'auto_create_stem', 'post': '',
         'is_choice': False},
        {'id': 260201, 'name': '论述类文本阅读', 'parent_id': 2602, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 260202, 'name': '实用类文本阅读', 'parent_id': 2602, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 260203, 'name': '文学类文本阅读', 'parent_id': 2602, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 260204, 'name': '现代诗歌阅读', 'parent_id': 2602, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 260205, 'name': '非连续性文本阅读', 'parent_id': 2602, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2603, 'name': '文言文阅读', 'parent_id': 2603, 'pre': 'auto_create_stem', 'post': '',
         'is_choice': False},
        {'id': 2604, 'name': '名句名篇默写', 'parent_id': 2604, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 260401, 'name': '句子默写', 'parent_id': 2604, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 260402, 'name': '情景默写', 'parent_id': 2604, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2605, 'name': '古代诗歌阅读', 'parent_id': 2605, 'pre': 'auto_create_stem', 'post': '',
         'is_choice': False},
        {'id': 2606, 'name': '语言表达', 'parent_id': 2606, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2607, 'name': '名著阅读', 'parent_id': 2607, 'pre': 'auto_create_stem', 'post': '', 'is_choice': False},
        {'id': 2611, 'name': '语用综合题', 'parent_id': 2611, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 261101, 'name': '选择题组', 'parent_id': 2611, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 261102, 'name': '选择+简答', 'parent_id': 2611, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2608, 'name': '作文', 'parent_id': 2608, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 260801, 'name': '命题作文', 'parent_id': 2608, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 260802, 'name': '话题作文', 'parent_id': 2608, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 260803, 'name': '材料作文', 'parent_id': 2608, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 260804, 'name': '微写作', 'parent_id': 2608, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2609, 'name': '其他', 'parent_id': 2609, 'pre': '', 'post': '', 'is_choice': False}],
    4: [{'id': 1101, 'name': '单选题', 'parent_id': 1101, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 1102, 'name': '填空题', 'parent_id': 1102, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 1104, 'name': '多选题', 'parent_id': 1104, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 1103, 'name': '解答题', 'parent_id': 1103, 'pre': '', 'post': '', 'is_choice': False}],
    17: [{'id': 1801, 'name': '选择题', 'parent_id': 1801, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1802, 'name': '填空题', 'parent_id': 1802, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1803, 'name': '连线题', 'parent_id': 1803, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1804, 'name': '判断题', 'parent_id': 1804, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1805, 'name': '解答题', 'parent_id': 1805, 'pre': '', 'post': '', 'is_choice': False}],
    12: [{'id': 1401, 'name': '选择题', 'parent_id': 1401, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 140101, 'name': '单选题', 'parent_id': 1401, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 140102, 'name': '多选题', 'parent_id': 1401, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 140103, 'name': '选择题组', 'parent_id': 1401, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1405, 'name': '选择填充题', 'parent_id': 1405, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1402, 'name': '填空题', 'parent_id': 1402, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1412, 'name': '课内填空', 'parent_id': 1412, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1403, 'name': '实验题', 'parent_id': 1403, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1404, 'name': '简答题', 'parent_id': 1404, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1406, 'name': '推断题', 'parent_id': 1406, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1407, 'name': '流程题', 'parent_id': 1407, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1408, 'name': '科学探究题', 'parent_id': 1408, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1409, 'name': '计算题', 'parent_id': 1409, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1411, 'name': '科普阅读题', 'parent_id': 1411, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1410, 'name': '综合应用题', 'parent_id': 1410, 'pre': '', 'post': '', 'is_choice': False}],
    8: [{'id': 3301, 'name': '选择题', 'parent_id': 3301, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 330101, 'name': '单选题', 'parent_id': 3301, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 330102, 'name': '多选题', 'parent_id': 3301, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 3306, 'name': '材料分析题', 'parent_id': 3306, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3307, 'name': '论述题', 'parent_id': 3307, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3303, 'name': '填空题', 'parent_id': 3303, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3304, 'name': '判断题', 'parent_id': 3304, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3305, 'name': '简答题', 'parent_id': 3305, 'pre': '', 'post': '', 'is_choice': False}],
    10: [{'id': 3201, 'name': '选择题', 'parent_id': 3201, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 320101, 'name': '单选题', 'parent_id': 3201, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 320102, 'name': '多选题', 'parent_id': 3201, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 3214, 'name': '最优选择题', 'parent_id': 3214, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 3203, 'name': '填空题', 'parent_id': 3203, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 3207, 'name': '判断题', 'parent_id': 3207, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 3213, 'name': '主观题', 'parent_id': 3213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 321301, 'name': '辨析题', 'parent_id': 3213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 321302, 'name': '简答题', 'parent_id': 3213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 321303, 'name': '图表题', 'parent_id': 3213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 321304, 'name': '材料分析题', 'parent_id': 3213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 321305, 'name': '论述题', 'parent_id': 3213, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 321306, 'name': '开放性试题', 'parent_id': 3213, 'pre': '', 'post': '', 'is_choice': False}],
    11: [{'id': 1301, 'name': '选择题', 'parent_id': 1301, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 130101, 'name': '单选题', 'parent_id': 1301, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 130104, 'name': '多选题', 'parent_id': 1301, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1302, 'name': '填空题', 'parent_id': 1302, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1303, 'name': '实验题', 'parent_id': 1303, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1304, 'name': '计算题', 'parent_id': 1304, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1305, 'name': '作图题', 'parent_id': 1305, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1306, 'name': '简答题', 'parent_id': 1306, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1307, 'name': '综合题', 'parent_id': 1307, 'pre': '', 'post': '', 'is_choice': False}],
    16: [{'id': 1701, 'name': '选择题', 'parent_id': 1701, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1702, 'name': '填空题', 'parent_id': 1702, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1703, 'name': '判断题', 'parent_id': 1703, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1712, 'name': '改错题', 'parent_id': 1712, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1704, 'name': '列举题', 'parent_id': 1704, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1705, 'name': '简答题', 'parent_id': 1705, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1706, 'name': '连线题', 'parent_id': 1706, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1711, 'name': '识图题', 'parent_id': 1711, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1707, 'name': '综合题', 'parent_id': 1707, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1709, 'name': '辨析题', 'parent_id': 1709, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1710, 'name': '论述题', 'parent_id': 1710, 'pre': '', 'post': '', 'is_choice': False}],
    66: [{'id': 201, 'name': '选择题', 'parent_id': 201, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 202, 'name': '填空题', 'parent_id': 202, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 203, 'name': '判断题', 'parent_id': 203, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 204, 'name': '计算题', 'parent_id': 204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 20401, 'name': '口算和估算', 'parent_id': 204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 20402, 'name': '竖式计算', 'parent_id': 204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 20403, 'name': '脱式计算', 'parent_id': 204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 20404, 'name': '解方程或比例', 'parent_id': 204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 20405, 'name': '看图列式', 'parent_id': 204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 20406, 'name': '图形计算', 'parent_id': 204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 20407, 'name': '文字题', 'parent_id': 204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 20408, 'name': '化简比和求比值', 'parent_id': 204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 20409, 'name': '其他计算', 'parent_id': 204, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 205, 'name': '解答题', 'parent_id': 205, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 206, 'name': '排序题', 'parent_id': 206, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 207, 'name': '连线题', 'parent_id': 207, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 208, 'name': '作图题', 'parent_id': 208, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 209, 'name': '改错题', 'parent_id': 209, 'pre': '', 'post': '', 'is_choice': False}],
    5: [{'id': 3101, 'name': '选择题', 'parent_id': 3101, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 310101, 'name': '单选题', 'parent_id': 3101, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 310103, 'name': '多选题', 'parent_id': 3101, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 3102, 'name': '非选择题', 'parent_id': 3102, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 310201, 'name': '综合题', 'parent_id': 3102, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 310202, 'name': '实验题', 'parent_id': 3102, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 310203, 'name': '判断题', 'parent_id': 3102, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 310204, 'name': '填空题', 'parent_id': 3102, 'pre': '', 'post': '', 'is_choice': False},
        # since 2024-04-22 选择题组大概率是大题题干
        {'id': 3103, 'name': '选择题组', 'parent_id': 3103, 'pre': 'auto_create_stem', 'post': '',
         'is_choice': False},
        ],
    18: [{'id': 1601, 'name': '选择题', 'parent_id': 1601, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 160101, 'name': '单选题', 'parent_id': 1601, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 160102, 'name': '多选题', 'parent_id': 1601, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1602, 'name': '填空题', 'parent_id': 1602, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1603, 'name': '连线题', 'parent_id': 1603, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1604, 'name': '判断题', 'parent_id': 1604, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1610, 'name': '判断说理题', 'parent_id': 1610, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1605, 'name': '辨析题', 'parent_id': 1605, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1606, 'name': '简答题', 'parent_id': 1606, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1607, 'name': '情境探究题', 'parent_id': 1607, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1608, 'name': '分析说明题', 'parent_id': 1608, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1609, 'name': '综合探究题', 'parent_id': 1609, 'pre': '', 'post': '', 'is_choice': False}],
    15: [{'id': 1501, 'name': '选择题', 'parent_id': 1501, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 150101, 'name': '单选题', 'parent_id': 1501, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 150102, 'name': '多选题', 'parent_id': 1501, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 150103, 'name': '选择题组', 'parent_id': 1501, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1502, 'name': '填空题', 'parent_id': 1502, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1503, 'name': '连线题', 'parent_id': 1503, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1504, 'name': '判断题', 'parent_id': 1504, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1505, 'name': '综合题', 'parent_id': 1505, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1506, 'name': '资料分析题', 'parent_id': 1506, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1507, 'name': '实验探究题', 'parent_id': 1507, 'pre': '', 'post': '', 'is_choice': False}],
    2: [{'id': 3001, 'name': '选择题', 'parent_id': 3001, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 300101, 'name': '单选题', 'parent_id': 3001, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 300102, 'name': '多选题', 'parent_id': 3001, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 3003, 'name': '填空题', 'parent_id': 3003, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3010, 'name': '判断题', 'parent_id': 3010, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3004, 'name': '实验题', 'parent_id': 3004, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3005, 'name': '计算题', 'parent_id': 3005, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3006, 'name': '推断题', 'parent_id': 3006, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 300601, 'name': '有机推断题', 'parent_id': 3006, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 300602, 'name': '元素或物质推断题', 'parent_id': 3006, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3009, 'name': '解答题', 'parent_id': 3009, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 300901, 'name': '工业流程题', 'parent_id': 3009, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 300902, 'name': '原理综合题', 'parent_id': 3009, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 300903, 'name': '结构与性质', 'parent_id': 3009, 'pre': '', 'post': '', 'is_choice': False}],
    9: [{'id': 3401, 'name': '选择题', 'parent_id': 3401, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 340101, 'name': '单选题', 'parent_id': 3401, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 340102, 'name': '多选题', 'parent_id': 3401, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 3402, 'name': '填空题', 'parent_id': 3402, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3403, 'name': '判断题', 'parent_id': 3403, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3404, 'name': '综合题', 'parent_id': 3404, 'pre': '', 'post': '', 'is_choice': False}],
    3: [{'id': 2901, 'name': '选择题', 'parent_id': 2901, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 290101, 'name': '单选题', 'parent_id': 2901, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 290104, 'name': '多选题', 'parent_id': 2901, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 2902, 'name': '填空题', 'parent_id': 2902, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2903, 'name': '实验题', 'parent_id': 2903, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2904, 'name': '解答题', 'parent_id': 2904, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2905, 'name': '作图题', 'parent_id': 2905, 'pre': '', 'post': '', 'is_choice': False}],
    13: [{'id': 1001, 'name': '选择题', 'parent_id': 1001, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 1002, 'name': '字词书写', 'parent_id': 1002, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1013, 'name': '基础知识综合', 'parent_id': 1013, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1014, 'name': '填空题', 'parent_id': 1014, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1003, 'name': '现代文阅读', 'parent_id': 1003, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1004, 'name': '文言文阅读', 'parent_id': 1004, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 100401, 'name': '对比阅读', 'parent_id': 1004, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 100402, 'name': '课内阅读', 'parent_id': 1004, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 100403, 'name': '课外阅读', 'parent_id': 1004, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1005, 'name': '名句名篇默写', 'parent_id': 1005, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 100501, 'name': '句子默写', 'parent_id': 1005, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 100502, 'name': '情景默写', 'parent_id': 1005, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1006, 'name': '诗歌鉴赏', 'parent_id': 1006, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1007, 'name': '语言表达', 'parent_id': 1007, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1008, 'name': '名著阅读', 'parent_id': 1008, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1009, 'name': '综合性学习', 'parent_id': 1009, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1015, 'name': '翻译', 'parent_id': 1015, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 1010, 'name': '作文', 'parent_id': 1010, 'pre': '', 'post': '', 'is_choice': False}],
    67: [{'id': 315, 'name': '听力题', 'parent_id': 315, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31501, 'name': '听音，选择听到的内容', 'parent_id': 315, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31502, 'name': '听音排序', 'parent_id': 315, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31503, 'name': '听音填空', 'parent_id': 315, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31504, 'name': '听音判断', 'parent_id': 315, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31505, 'name': '听音连线', 'parent_id': 315, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31506, 'name': '听音，选择正确答案', 'parent_id': 315, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 301, 'name': '选择题', 'parent_id': 301, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 30101, 'name': '单选题', 'parent_id': 301, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 30102, 'name': '语音选择题', 'parent_id': 301, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 30103, 'name': '词汇选择题', 'parent_id': 301, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 30104, 'name': '选择正确图片/词句', 'parent_id': 301, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 30105, 'name': '情景选择', 'parent_id': 301, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 302, 'name': '填空题', 'parent_id': 302, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30201, 'name': '用单词正确形式填空', 'parent_id': 302, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30202, 'name': '补全句子', 'parent_id': 302, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30203, 'name': '选词/短语填空', 'parent_id': 302, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30204, 'name': '看图完成句子', 'parent_id': 302, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30205, 'name': '按要求填空', 'parent_id': 302, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 303, 'name': '单词拼写', 'parent_id': 303, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30301, 'name': '看图识词', 'parent_id': 303, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30302, 'name': '词形转换', 'parent_id': 303, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30303, 'name': '根据字母/中文提示完成单词', 'parent_id': 303, 'pre': '', 'post': '',
          'is_choice': False},
         {'id': 30304, 'name': '词汇分类', 'parent_id': 303, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 307, 'name': '判断题', 'parent_id': 307, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30701, 'name': '语音/词汇判断', 'parent_id': 307, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30702, 'name': '判断句子和图片是否相符', 'parent_id': 307, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30703, 'name': '判断句子正误', 'parent_id': 307, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 308, 'name': '句型转换', 'parent_id': 308, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30801, 'name': '对划线部分提问', 'parent_id': 308, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30802, 'name': '同义句转换', 'parent_id': 308, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30803, 'name': '改写句子', 'parent_id': 308, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30804, 'name': '写出问答句', 'parent_id': 308, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 312, 'name': '改错题', 'parent_id': 312, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31201, 'name': '选出错误选项并改正', 'parent_id': 312, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31202, 'name': '找出错误部分并改正', 'parent_id': 312, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 313, 'name': '匹配题', 'parent_id': 313, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31301, 'name': '词图匹配', 'parent_id': 313, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31302, 'name': '句图匹配', 'parent_id': 313, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31303, 'name': '句子匹配', 'parent_id': 313, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31304, 'name': '中英文匹配', 'parent_id': 313, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 324, 'name': '连线题', 'parent_id': 324, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 304, 'name': '排序题', 'parent_id': 304, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 323, 'name': '连词成句', 'parent_id': 323, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 306, 'name': '翻译题', 'parent_id': 306, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30604, 'name': '汉译英：整句', 'parent_id': 306, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30605, 'name': '英译汉：整句', 'parent_id': 306, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30601, 'name': '英译汉：单词/短语', 'parent_id': 306, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30602, 'name': '汉译英：单词/短语', 'parent_id': 306, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30603, 'name': '中英互译：单词/短语', 'parent_id': 306, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 311, 'name': '补全对话/短文', 'parent_id': 311, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31101, 'name': '填内容补全对话/短文', 'parent_id': 311, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 31102, 'name': '选内容补全对话/短文', 'parent_id': 311, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 305, 'name': '阅读理解', 'parent_id': 305, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30501, 'name': '阅读选择', 'parent_id': 305, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 30503, 'name': '阅读判断', 'parent_id': 305, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 309, 'name': '完形填空', 'parent_id': 309, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 327, 'name': '任务型阅读', 'parent_id': 327, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 316, 'name': '字母题', 'parent_id': 316, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 318, 'name': '抄写题', 'parent_id': 318, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 319, 'name': '画图题', 'parent_id': 319, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 320, 'name': '仿写', 'parent_id': 320, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 32001, 'name': '仿写句子', 'parent_id': 320, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 32002, 'name': '仿写对话', 'parent_id': 320, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 325, 'name': '书面表达', 'parent_id': 325, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 32501, 'name': '命题作文', 'parent_id': 325, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 32502, 'name': '提纲作文', 'parent_id': 325, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 32503, 'name': '图画作文', 'parent_id': 325, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 32504, 'name': '其他作文', 'parent_id': 325, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 326, 'name': '其他', 'parent_id': 326, 'pre': '', 'post': '', 'is_choice': False}],
    65: [{'id': 101, 'name': '选择题', 'parent_id': 101, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 102, 'name': '填空题', 'parent_id': 102, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 103, 'name': '语言表达', 'parent_id': 103, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 104, 'name': '现代文阅读', 'parent_id': 104, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 105, 'name': '文言文阅读', 'parent_id': 105, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 106, 'name': '信息匹配', 'parent_id': 106, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 107, 'name': '书面表达', 'parent_id': 107, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 108, 'name': '句型转换', 'parent_id': 108, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 109, 'name': '连线题', 'parent_id': 109, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 110, 'name': '判断题', 'parent_id': 110, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 111, 'name': '排序题', 'parent_id': 111, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 112, 'name': '书写', 'parent_id': 112, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 113, 'name': '诗词曲鉴赏', 'parent_id': 113, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 114, 'name': '修改病句', 'parent_id': 114, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 115, 'name': '简答题', 'parent_id': 115, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 116, 'name': '其他', 'parent_id': 116, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 117, 'name': '听读鉴赏', 'parent_id': 117, 'pre': '', 'post': '', 'is_choice': False}],
    64: [{'id': 3901, 'name': '选择题', 'parent_id': 3901, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 3902, 'name': '填空题', 'parent_id': 3902, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 3907, 'name': '选择题组', 'parent_id': 3907, 'pre': '', 'post': '', 'is_choice': True},
         {'id': 3903, 'name': '判断题', 'parent_id': 3903, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 3904, 'name': '简答题', 'parent_id': 3904, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 3905, 'name': '作图题', 'parent_id': 3905, 'pre': '', 'post': '', 'is_choice': False},
         {'id': 3906, 'name': '分析评价', 'parent_id': 3906, 'pre': '', 'post': '', 'is_choice': False}],
    6: [{'id': 2801, 'name': '听力选择题', 'parent_id': 2801, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 280101, 'name': '短对话', 'parent_id': 2801, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 280102, 'name': '长对话', 'parent_id': 2801, 'pre': 'auto_create_stem', 'post': '', 'is_choice': True},
        {'id': 280103, 'name': '短文', 'parent_id': 2801, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2802, 'name': '听力填空', 'parent_id': 2802, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2803, 'name': '单项选择', 'parent_id': 2803, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 2804, 'name': '单词拼写', 'parent_id': 2804, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280401, 'name': '根据首字母填写单词', 'parent_id': 2804, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280402, 'name': '根据汉语意思填写单词', 'parent_id': 2804, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280403, 'name': '根据句意填写单词', 'parent_id': 2804, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280404, 'name': '根据中英文提示填写单词', 'parent_id': 2804, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2805, 'name': '完成句子', 'parent_id': 2805, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2820, 'name': '根据所给汉语提示填空', 'parent_id': 2820, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2821, 'name': '句型转换', 'parent_id': 2821, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2806, 'name': '改错', 'parent_id': 2806, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280601, 'name': '单句改错', 'parent_id': 2806, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280602, 'name': '短文改错', 'parent_id': 2806, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2807, 'name': '翻译', 'parent_id': 2807, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280705, 'name': '汉译英（单词/短语）', 'parent_id': 2807, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280706, 'name': '英译汉（单词/短语）', 'parent_id': 2807, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280701, 'name': '汉译英（整句）', 'parent_id': 2807, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280702, 'name': '英译汉（整句）', 'parent_id': 2807, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280703, 'name': '英汉互译', 'parent_id': 2807, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280704, 'name': '单词释义', 'parent_id': 2807, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2808, 'name': '完形填空', 'parent_id': 2808, 'pre': 'auto_create_stem', 'post': '', 'is_choice': True},
        {'id': 2809, 'name': '阅读理解', 'parent_id': 2809, 'pre': 'auto_create_stem', 'post': '', 'is_choice': True},
        {'id': 280901, 'name': '阅读选择', 'parent_id': 2809, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 280902, 'name': '七选五', 'parent_id': 2809, 'pre': 'auto_create_stem', 'post': '5_from_7',
         'is_choice': False},
        {'id': 280903, 'name': '六选四', 'parent_id': 2809, 'pre': 'auto_create_stem', 'post': '6_from_4',
         'is_choice': False},
        {'id': 280904, 'name': '五选五', 'parent_id': 2809, 'pre': 'auto_create_stem', 'post': '5_from_5',
         'is_choice': False},
        {'id': 2810, 'name': '其他阅读题型', 'parent_id': 2810, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281001, 'name': '任务型阅读', 'parent_id': 2810, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281002, 'name': '阅读表达', 'parent_id': 2810, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281004, 'name': '信息匹配', 'parent_id': 2810, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2817, 'name': '对话填空', 'parent_id': 2817, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2812, 'name': '短文填空', 'parent_id': 2812, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281201, 'name': '根据首字母或汉语或语境提示补全短文', 'parent_id': 2812, 'pre': '', 'post': '',
         'is_choice': False},
        {'id': 281203, 'name': '根据课文内容填空', 'parent_id': 2812, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2819, 'name': '词性转换', 'parent_id': 2819, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2813, 'name': '语法填空', 'parent_id': 2813, 'pre': 'auto_create_stem', 'post': 'auto_create_blank',
         'is_choice': False},
        {'id': 281301, 'name': '用单词的适当形式完成句子', 'parent_id': 2813, 'pre': '', 'post': '',
         'is_choice': False},
        {'id': 281302, 'name': '用单词的适当形式完成短文', 'parent_id': 2813, 'pre': '', 'post': '',
         'is_choice': False},
        {'id': 2814, 'name': '书面表达', 'parent_id': 2814, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281401, 'name': '提纲类作文', 'parent_id': 2814, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281402, 'name': '图表作文', 'parent_id': 2814, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281403, 'name': '图画作文', 'parent_id': 2814, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281404, 'name': '开放性作文', 'parent_id': 2814, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281405, 'name': '读写任务', 'parent_id': 2814, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281406, 'name': '读后续写', 'parent_id': 2814, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281407, 'name': '概要写作', 'parent_id': 2814, 'pre': '', 'post': '', 'is_choice': False},
        {'id': -1, 'name': '其他应用文', 'parent_id': 2814, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2818, 'name': '选词填空', 'parent_id': 2818, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 281801, 'name': '选用适当的单词或短语补全句子', 'parent_id': 2818, 'pre': '', 'post': '',
         'is_choice': False},
        {'id': 281802, 'name': '选用适当的单词或短语补全短文', 'parent_id': 2818, 'pre': '', 'post': '',
         'is_choice': False},
        {'id': 2815, 'name': '其他', 'parent_id': 2815, 'pre': '', 'post': '', 'is_choice': False}
        ],

    # 理综
    21: [
        {'id': 3001, 'name': '选择题', 'parent_id': 3001, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 300101, 'name': '单选题', 'parent_id': 3001, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 300102, 'name': '多选题', 'parent_id': 3001, 'pre': '', 'post': '', 'is_choice': True},
        {'id': 3003, 'name': '填空题', 'parent_id': 3003, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3010, 'name': '判断题', 'parent_id': 3010, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3004, 'name': '实验题', 'parent_id': 3004, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3005, 'name': '计算题', 'parent_id': 3005, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3006, 'name': '推断题', 'parent_id': 3006, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 300601, 'name': '有机推断题', 'parent_id': 3006, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 300602, 'name': '元素或物质推断题', 'parent_id': 3006, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 3009, 'name': '解答题', 'parent_id': 3009, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 300901, 'name': '工业流程题', 'parent_id': 3009, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 300902, 'name': '原理综合题', 'parent_id': 3009, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 300903, 'name': '结构与性质', 'parent_id': 3009, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2903, 'name': '实验题', 'parent_id': 2903, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2904, 'name': '解答题', 'parent_id': 2904, 'pre': '', 'post': '', 'is_choice': False},
        {'id': 2905, 'name': '作图题', 'parent_id': 2905, 'pre': '', 'post': '', 'is_choice': False}
    ]

}
